/**
 * Date:2017年10月17日下午3:15:19
 *
 */

package com.xue.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.xue.AppContext;
import com.xue.common.core.AppException;
import com.xue.common.util.Encode;
import com.xue.common.vo.ParamMap;
import com.xue.common.vo.ResultMap;
import com.xue.pojo.sys.SysMenu;
import com.xue.pojo.sys.SysUser;
import com.xue.service.sys.ISysMenuService;
import com.xue.service.sys.ISysUserService;

/**
 * 
 * Description: 登录控制器 <br/>
 * Date: 2018年10月11日 下午4:22:09 <br/>
 *
 * @author xuejianxinokok@163.com
 */
@RestController
@RequestMapping(value = "/")
public class LoginController {
	private static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoginController.class);
	@Autowired
	private ISysUserService service;
	@Autowired
	private ISysMenuService sysMenuService;

	/**
	 * Description:移动端用户登录，只在本地测试用<br/>
	 * Date: 2017年10月25日 下午2:09:01 <br/>
	 * 
	 * @author xuejianxin
	 * @param userid
	 * @param password
	 * @return
	 */
	@PostMapping("login/test")
	public SysUser loginTest(@RequestBody SysUser user) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("userid", user.getUserid());
		Optional<SysUser> admin = service.queryOne(params);
		if (!admin.isPresent()) {
			throw new AppException("用户名不存在");
		}
		SysUser loginUser=admin.get();
		String password = Encode.md5(user.getPassword()).toLowerCase();
		if (password.equals(admin.get().getPassword())) {
			//loginUser.setUsername(admin.get().getUsername());// 获取用户中文名称
			// 加载用户菜单
			Set<String> myMenuIds = sysMenuService.queryMenuIdsByUserId(admin.get().getId().toString(), 0);
			loginUser.setMenuIds(myMenuIds);
			AppContext.setLoginUser(loginUser);// 放到session中
			AppContext.getSession().setAttribute("username", loginUser.getUserid());
			loginUser.setPassword(null);//清空密码
			return loginUser;// 发送到前台
		}
		throw new AppException("密码错误!");
	}

	/**
	 * 
	 * Description:注销用户<br/>
	 * Date: 2018年7月24日 上午11:08:56 <br/>
	 * 
	 * @author xuejianxin
	 * @param session
	 * @return
	 */
	@GetMapping("login/out")
	public void logout() {
		AppContext.logout();
	}

	/**
	 * 
	 * Description:检查token 时候有效<br/>
	 * Date: 2018年3月12日 下午3:01:35 <br/>
	 * 
	 * @author xuejianxin
	 * @return
	 */
	@GetMapping("checkToken")
	public String checkToken() {
		return "ok";
	}

	/**
	 * 
	 * Description:加载用户菜单<br/>
	 * Date: 2018年3月12日 下午3:23:57 <br/>
	 * 
	 * @author xuejianxin
	 * @param pm
	 * @return
	 */
	@PostMapping(value = "reloadMenus")
	public Map<String, Object> reloadMenus(@RequestBody ParamMap pm) {
		List<SysMenu> list = reloadMenusFromDb(pm);
		// SysUser loginUser = AppContext.getLoginUser();

		// Map<String, Object> params = new HashMap<String, Object>();
		// params.put("codeArray", loginUser.getMenuIds());
		// params.put("userid", loginUser.getUserid());
		// params.put("resourceType", 1);
		// List<String> shoucangCodes =
		// sysMenuService.loadUserShouCangMenuCodes(params);

		return ResultMap.get().addData("list", list)
		// .addData("shoucang", shoucangCodes).addData("user", loginUser)
		;
	}

	// 模拟从db 加载菜单
	private List<SysMenu> reloadMenusFromDb(ParamMap pm) {
		return sysMenuService.buildMenuTree(AppContext.getLoginUser().getMenuIds(), "1", "2");
	}

}